作者:小丽之家ko | 来源:互联网 | 2024-12-21 11:36
本文详细介绍了在Android6.0系统中切换到指定Wi-Fi的方法,包括常见的问题、原因分析及解决方案。通过官方文档和代码示例,帮助开发者更好地理解和实现这一功能。
本文由编程笔记小编整理,主要介绍如何在 Android 6.0 中实现切换到指定 Wi-Fi 的方法,并提供详细的解决方案。
常见问题
1. 在网上找到一个 Wi-Fi 工具类并编写了初步的切换到指定 Wi-Fi 的 demo,测试后一切正常,但在实际设备上却无法连接成功,点击连接时 App 无响应。
2. Wi-Fi 切换速度慢且不稳定,同事建议继续优化。根据设备的 Wi-Fi 加密模式修改了创建 Wi-Fi 的方式,测试后基本都能连上,但偶尔仍不能成功切换。
3. 最近一次测试中,发现切换始终失败,严重影响用户体验。
原因分析
Android 6.0 只允许操作自己创建的 Wi-Fi 配置(WifiConfiguration
)。上述问题的主要原因是对“个人创建的 Wi-Fi 配置”理解不到位,以及对 Wi-Fi 加密模式不够熟悉。例如,我们的设备使用的是 WPA2 加密模式,直接使用 WPA2 加密模式后,切换速度和成功率显著提高。
Wi-Fi 类型
Wi-Fi 分为两种类型:一种是通过代码创建的 Wi-Fi,另一种是由用户手动输入密码或由其他应用创建的 Wi-Fi。前者称为个人 Wi-Fi,后者称为系统 Wi-Fi。
Wi-Fi 操作权限
系统 Wi-Fi: 虽然可以通过 WifiManager.getSavedConfigurations()
获取指定 Wi-Fi 的配置信息,但无法进行具体操作,如添加、启用或移除网络。
个人 Wi-Fi: 可以自由进行添加、启用和移除操作。
测试过程
WifiConfiguration wifiNewCOnfiguration= createWifiInfo(aimWifiName, aimWifiPwd); // 使用 WPA2 加密方式
int newNetworkId = wifiManager.addNetwork(wifiNewConfiguration);
Log.e("MainActivity", "newNetworkId:" + newNetworkId);
boolean enableNetwork = wifiManager.enableNetwork(newNetworkId, true);
Log.e("MainActivity", "enableNetwork:" + enableNetwork);
解决方案
为了确保在 Android 6.0 中正确切换到指定 Wi-Fi,以下是最终的解决方案:
WifiConfiguration wifiNewCOnfiguration= createWifiInfo(aimWifiName, aimWifiPwd); // 使用 WPA2 加密方式
int newNetworkId = mWifiManager.addNetwork(wifiNewConfiguration);
if (newNetworkId == -1) {
Log.e("MainActivity", "操作失败,请取消手机 Wi-Fi 列表中对该设备连接的保存");
} else {
boolean enableNetwork = mWifiManager.enableNetwork(newNetworkId, true);
if (!enableNetwork) {
Log.e("MainActivity", "切换到指定 Wi-Fi 失败");
} else {
Log.e("MainActivity", "切换到指定 Wi-Fi 成功");
}
}
Demo 地址
您可以访问 GitHub 上的 Demo 获取完整的代码示例。